<?php namespace Phpcmf\Controllers\Admin;
/* *
 *
 * 本TableDemo的语法参考： http://help.phpcmf.net/445.html
 *
 * */
class Xcx extends \Phpcmf\Table
{

    private $catid;

    public function __construct(...$params)
    {
        parent::__construct(...$params);
        // 判断云市场
        if (!dr_is_app('cloud')) {
            $this->_admin_msg(0, '你没有安装[私有云市场]插件，请在插件商城中安装它');
        }
        $cloud = \Phpcmf\Service::M('app')->get_config('cloud');
        if (!isset($cloud['cloud']['catid'][58]) || !$cloud['cloud']['catid'][58]) {
            $this->_admin_msg(0, '需要在[私有云市场]插件的-云端关联-关联小程序栏目');
        }
        $this->catid = intval($cloud['cloud']['catid'][58]);
        $module = $this->get_cache('module-'.SITE_ID.'-cloud');
        $category = $module['category'][$this->catid];
        if (!$category) {
            $this->_admin_msg(0, '[私有云市场]插件的小程序栏目['.$this->catid.']不存在');
        }

        // 表单显示名称
        $this->name = dr_lang('小程序');
        // 模板前缀(避免混淆)
        $this->tpl_prefix = 'xcx_';
        // 用于表储存的字段，后台可修改的表字段
        $field = array (
            'name' =>
                array (
                    'name' => '小程序名称',
                    'fieldname' => 'name',
                ),
            'cid' =>
                array (
                    'name' => '关联商品',
                    'fieldname' => 'cid',
                ),
            'uid' =>
                array (
                    'name' => 'uid',
                    'fieldname' => 'uid',
                ),
            'username' =>
                array (
                    'name' => '账号',
                    'fieldname' => 'username',
                ),
        );
        // 初始化数据表
        $this->_init([
            'table' => 'xcx',  // （不带前缀的）表名字
            'field' => $field, // 可查询的字段
            'select_list' => 'xcx.*,'.SITE_ID.'_cloud_buy.price,'.SITE_ID.'_cloud_buy.inputtime,'.SITE_ID.'_cloud_buy.endtime,'.SITE_ID.'_cloud_buy.cloud_id',
            'join_list' => [SITE_ID.'_cloud_buy', 'xcx.oid='.SITE_ID.'_cloud_buy.id', 'left'], // 可查询的字段
            'order_by' => 'xcx.id desc', // 列表排序，默认的排序方式
            'date_field' => '', // 按时间段搜索字段，没有时间字段留空
        ]);

        // 把公共变量传入模板
        \Phpcmf\Service::V()->assign([
            // 搜索字段
            'field' => $field,
            'catid' => $this->catid,
            // 后台的菜单
            'menu' => \Phpcmf\Service::M('auth')->_admin_menu(
                [
                    $this->name => [APP_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/index', 'fa fa-cubes'],
                    '添加' => [APP_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/add', 'fa fa-plus'],
                    '修改' => ['hide:'.APP_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/edit', 'fa fa-edit'],
                ])
        ]);
    }

    // 查看列表
    public function index() {
        list($tpl) = $this->_List();
        \Phpcmf\Service::V()->display($tpl);
    }

    // 添加内容
    public function add() {
        list($tpl) = $this->_Post(0);
        \Phpcmf\Service::V()->assign([
            'shop_id' => intval($_GET['cid']),
        ]);
        \Phpcmf\Service::V()->display($tpl);
    }

    // 修改内容
    public function edit() {
        $this->_Post(intval(\Phpcmf\Service::L('input')->get('id')));
        \Phpcmf\Service::V()->display('xcx_edit.html');
    }

    // 删除内容
    public function del() {
        $this->_Del(
            \Phpcmf\Service::L('Input')->get_post_ids(),
            function($rows) {
                // 删除前的验证
                return dr_return_data(1, 'ok', $rows);
            },
            function($rows) {
                // 删除后的处理
                return dr_return_data(1, 'ok');
            },
            \Phpcmf\Service::M()->dbprefix($this->init['table'])
        );
    }

    /**
     * 获取内容
     * $id      内容id,新增为0
     * */
    protected function _Data($id = 0) {
        $row = parent::_Data($id);
        // 这里可以对内容进行格式化显示操处理
        return $row;
    }


    // 保存内容
    protected function _Save($id = 0, $data = [], $old = [], $func = null, $func2 = null) {
        $data = \Phpcmf\Service::L('input')->post('data');
        return parent::_Save($id, $data, $old, function($id, $data, $old){
            // 验证数据
            if (!$data['name']) {
                return dr_return_data(0, '名称不能为空', ['field' => 'name']);
            }
            // 保存之前执行的函数，并返回新的数据
            if (!$id) {
                // 当提交新数据时，把当前时间插入进去
                //$data['inputtime'] = SYS_TIME;
                if (!$data['username']) {
                    return dr_return_data(0, '账号不能为空', ['field' => 'username']);
                } elseif (!$data['cid']) {
                    return dr_return_data(0, '关联商品必须选择', ['field' => 'cid']);
                }
                $shop = \Phpcmf\Service::M()->table_site('cloud')->where('id', intval($data['cid']))->getRow();
                if (!$shop) {
                    return dr_return_data(0, '关联商品不存在', ['field' => 'cid']);
                }
                $member = \Phpcmf\Service::M()->db->table('member')->where('username', dr_safe_replace($data['username']))->get()->getRowArray();
                if (!$member) {
                    return dr_return_data(0, '账号不存在', ['field' => 'username']);
                }
                $data['uid'] = $member['id'];
                // 创建订单
                $save = [
                    'uid' => $member['id'],
                    'cid' => $shop['id'],
                    'catid' => $shop['catid'],
                    'cloud_id' => $shop['cloud_id'],
                    'price' => $shop['price'],
                    'inputtime' => SYS_TIME,
                    'endtime' => 0,
                    'domain' => '',
                    'error' => '未付款',
                    'status' => -1,
                ];
                $rt = \Phpcmf\Service::M()->table(SITE_ID.'_cloud_buy')->insert($save);
                !$rt['code'] && $this->_json(0, $rt['msg'], $rt['data']);
                $data['oid'] = $rt['code'];
                if ($shop['cloud_id'] > 0) {
                    // 判断是否是云端商品
                    $save['id'] = $rt['code'];
                    $yrt = \Phpcmf\Service::M('zy', 'cloud')->tx($save);
                    if ($yrt['code']) {
                        // 购买成功
                        \Phpcmf\Service::M()->table(SITE_ID.'_cloud_buy')->update($save['id'], [
                            'status' => 1,
                            'error' => '',
                        ]);
                    } else {
                        // 删除订单
                        \Phpcmf\Service::M()->table(SITE_ID.'_cloud_buy')->delete($save['id']);
                        $this->_json(0, $yrt['msg']);
                    }
                } else {
                    \Phpcmf\Service::M()->table(SITE_ID.'_cloud_buy')->update($rt['code'], [
                        'inputtime' => SYS_TIME,
                        'endtime' => SYS_TIME + YEAR,
                        'error' => '',
                        'status' => 1,
                    ]);
                    // 购买成功
                }
                $data['logo'] = $shop['thumb'];
                $data['setting'] = '';
                $rt = \Phpcmf\Service::M('xcx', 'xcx')->install($data);
                if ($rt['code']) {
                    $this->_json(1, '创建成功');
                } else {
                    $this->_json(0, $rt['msg']);
                }
            } else {
                // 修改小程序
            }
            return dr_return_data(1, null, $data);
        }, function ($id, $data, $old) {
            // 保存之后执行的动作
        });
    }

}
